home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / mouse.h < prev    next >
C/C++ Source or Header  |  1994-10-10  |  4KB  |  179 lines

  1. #ifndef __MOUSE_H
  2. #define __MOUSE_H
  3. #ifndef __GEOM
  4. #include "geom.h"
  5. #endif
  6.  
  7. enum MBUTTONSTATE {MOUSELEFT=1,MOUSERIGHT=2,MOUSECENTER=4,MOUSEANY=7};
  8.  
  9. struct mousestatus
  10.   {
  11.    int buttonstate, //  see MBUTTONSTATE ( bit 0 - left 1 -right 2 - middle)
  12.    x, y;
  13.  
  14.    loc where() const {return loc(x,y);}
  15.    int pressed (int button) const {return (buttonstate & button);}
  16.  };
  17.  
  18.   typedef void huge  mousehandlerfunc();
  19.  
  20.  
  21.  int mouseType(); /*
  22.  
  23.     Use this function, to check for mouse presence and the number
  24.     of buttons
  25.  
  26.     0 - no mouse , 2,3
  27.  
  28.   */
  29.  
  30.  void mouseReset();
  31.  /*
  32.       Reinitialize mouse driver and re-register handler.
  33.  
  34.  
  35.  */
  36.  
  37. mousestatus mouseGetStatus();
  38.    /*
  39.        The main working routine.
  40.        Present mouse position and which buttons are down ?
  41.  
  42.  
  43.    */
  44.  
  45. void mouseSetPosition(loc at);
  46.   /*
  47.  
  48.  
  49.   */
  50.  
  51. void mouseSetRange(const rect& range);
  52.   /*
  53.       limit mouse cursor motion
  54.   */
  55.  
  56. void mouseDefaultRange(); // Graphic-mode only !
  57.  
  58.    void mouseSetSpeed(const loc& speed); // mickeys / 8 pixels
  59.    void mouseDefaultSpeed();
  60.  
  61.  
  62.    void mouseSetDoublingSpeed(int speed); //  mickeys /second
  63.     /*
  64.       When mouse is moved faster , then  pixel/mickey  ratio is doubled
  65.  
  66.     */
  67.  
  68.    void mouseDefaultDoublingSpeed();
  69.  
  70.    void mouseDoublingOff();
  71.  
  72.    unsigned mouseStateStorageSize();
  73.    void mouseSaveState(char far * buffer);
  74.    void mouseRestoreState(char far * buffer);
  75.  
  76.  
  77.  
  78.   void mouseSetHandler (mousehandlerfunc handler);
  79.  
  80.  
  81.   void mouseDisableHandler ();
  82.  
  83.  
  84.    void mouseShowCursor();
  85.  
  86.    void mouseHideCursor();
  87.   /* Always hide cursor, when drawing something on screen */
  88.  
  89.  
  90. void mouseSuspend();
  91.   /*
  92.      Hide cursor and turn off mouse handler
  93.  
  94.   */
  95.  
  96. void mouseResume();
  97.   /*
  98.     Display cursor and restore mouse handler
  99.  
  100.   */
  101.  
  102.  
  103.  /////////////////////////////
  104.  ////  The classes below are for system purposes
  105.  ////////////////////////////
  106.  
  107. struct mouseeventlow //low-level
  108.  {
  109.     enum EVT {MSMOVE=0x1,
  110.           MSLP=0x02,MSLR=0x04,
  111.           MSRP=0x08,MSRR=0x10,
  112.           MSCP=0x20,MSCR=0x40,
  113.           MSNONE=0x00,MSALL=0x7f };
  114.     unsigned evtype;
  115.     unsigned buttonstatus;
  116.     unsigned x,y;
  117.     int mx,my;
  118.  
  119.  };
  120.  
  121. class mousemanager;
  122.  
  123. class mousehandler
  124.     {
  125.       static mousemanager *   manager;
  126.       mousehandler * next;
  127.       rect * domain;
  128.       unsigned EventMask;
  129.  
  130.       friend mousemanager;
  131.       public:
  132.       mousehandler(unsigned callmask,rect * area=0);
  133.  
  134.  
  135.       virtual void handle(mouseeventlow& ev)=0;
  136.      // function can set evtype field to 0  for terminating
  137.      // this event processing in handler's chain
  138.  
  139.       int covers(loc point) const
  140.      {return domain ? domain->contains(point) : 1;}
  141.       virtual ~mousehandler();
  142.  
  143.     };
  144.  
  145.  
  146.  class mousehole : mousehandler
  147.        {
  148.      int isinside;
  149.      rect door;
  150.      virtual void handle(mouseeventlow& ev);
  151.      int covers(loc& pos) const;  // incompatible with
  152.      public:                      //         mousehandler::covers
  153.       mousehole(rect hole);
  154.       virtual void enter()=0;
  155.       virtual void leave()=0;
  156.  
  157.        };
  158.  
  159.  
  160.  
  161. class mousemanager
  162.   {   mousehandler * handlist;
  163.       volatile locked;
  164.       static Nbuttons;  // 0 - mouse not avail
  165.  
  166.    static void huge _saveregs  mainmousehandler();
  167.       friend int mouseType();
  168.       public:
  169.       mousemanager();
  170.       void reset();
  171.       void attach ( mousehandler * handler);
  172.       void detach (mousehandler * handler);
  173.       ~mousemanager(); // unset handler proc !
  174.   };
  175.  
  176.  
  177.  
  178. #endif  //__MOUSE_H
  179.